|
 |
Applicazioni Software |
PROGETTO n° 06 - 8/12
[95 di 166] |
 | La disponibilità di soli
5 bit d'ingresso dalla porta parallela (nella classica configurazione
Centronics
SPP)
obbliga ad una lettura in 2 tempi
di 4 bit alla
volta, assumendo prima la parte alta
e poi la parte bassa del byte frutto della
conversione. |
| |
|
Effettiva Lettura del bus
dati del Convertitore |
 | La
Procedura
Mpx_Dato è, in
realtà, una parte della
Procedura
Leggi,
descritta nella pagina successiva:
il suo compito è quello di gestire l'acquisizione
degli 8 bit generati dal convertitore
ADC0804. |
 | Ad essa è demandato il compito di trasformare il
byte reso disponibile dal convertitore poco dopo l'attivazione
di RD, in 2 gruppi
da 4 bit, letti poi
in sequenza tramite il
Registro d'ingresso
0379H/0279H. |
 | La selezione delle 2 quaterne è resa possibile
dal
multiplexer
74LS157,
il cui ingresso di selezione A/B (pin 1) è controllato
mediante
il
Registro d'uscita
037AH/027AH. |
 | Le istruzioni che la compongono sono già state più volte
descritte nei progetti precedenti: |
 | La lettura dei 4
bit più significativi del bus dati dell'ADC
(DB7÷DB4, rispettivamente attaccati ai
pin 2, 5,
11 e 14, ingressi di tipo "A" del
'157,
rispettivamente sui pin 11,
10, 12 e
13
del
connettore della parallela)
è ottenuta forzando uno 0
sull'ingresso
di selezione A/B
(pin 1
del selettore
'157)
cioè un 1
(essendo
invertito internamente dall'hardware) sul bit0
del Registro d'uscita
037AH/027AH,
disponibile sul
pin 1
della porta parallela: |
 |
Dopo il breve ritardo
(per consentire l'assestamento del segnale) i dati da leggere
sono stabili sui pin
11, 10,
12 e 13
del
connettore della
parallela e possono essere letti in
sequenza sui
bit7, bit6,
bit5 e bit4
del
Registro d'ingresso
0379H/0279H. |
 |
Poichè nel progetto viene coinvolto
solo il
bit0
la scelta di forzare a zero
tutti gli altri non si ritiene
sconveniente e non crea disagio. |
 |
Lo schema mette in
evidenza che, dopo la lettura, lo stato dei 4 bit DB7÷DB4 del
bus dati dell'ADC è disponibile nei
4 bit più significativi del registro, sebbene il valore logico proposto sul
pin 11
della porta parallela venga
invertito internamente dall'hardware,
prima di essere letto sul
bit7. |
 |
Per questo,
dopo la fase di lettura, il programma deve provvedere ai relativi
aggiustamenti: |
 |
L'operazione di
XOR di
AL
con 80H
rovescia il valore logico del solo bit7,
lasciando inalterati gli altri; in questo modo si pone rimedio alla
inversione prodotta internamente da hardware. |
 |
Per facilitare la prossima ricomposizione del
dato, è conveniente
azzerare i 4 bit bassi, con la classica maschera
prodotta dall'istruzione
AND
(AND
AL,0F0H). |
 |
La
prima fase d'acquisizione è dunque
terminata: l'informazione così ottenuta, nella forma
xxxx0000B, viene salvata nel registro
BL. |
 |
E' ora necessario spostare il cursore del
multiplexer
74LS157,
in modo da collegare ora
i 4 bit meno significativi del
bus dati dell'ADC
(DB3÷DB0, rispettivamente attaccati ai
pin 3, 6,
10 e 13, ingressi di tipo "B" del
'157, ancora disponibili sui
pin 11, 10,
12 e 13
del
connettore della
parallela). |
 | Per questo scopo si forza un 1
sull'ingresso
di selezione A/B
(pin 1
del selettore
'157)
cioè un 0
(per l'inversione
hardware interna) sul bit0
del Registro d'uscita
037AH/027AH,
disponibile sul
pin 1
della porta parallela: |
 |
La procedura è identica a quella della fase precedente: il breve ritardo
imposto rende stabili i dati da leggere
sui pin 11, 10,
12 e 13
del
connettore della
parallela, per cui possono essere di nuovo letti in
sequenza sui
bit7, bit6,
bit5 e bit4
del
Registro d'ingresso
0379H/0279H. |
 |
Ora nei
4 bit più significativi di AL è disponibile lo stato dei
4 bit DB3÷DB0 del
bus dati dell'ADC,
non dimenticando che il
valore logico del
bit7
è sempre
invertito internamente dall'hardware
rispetto al valore assunto dal
pin 11
della porta parallela: |
 |
Per questo,
dopo la fase di lettura, il programma deve provvedere ai relativi
aggiustamenti; in primis l'istruzione
XOR di
AL
con 80H
rovescia il valore logico del solo bit7
lasciando inalterati gli altri. |
 | Successivamente la sequenza delle 4
SHR
sposta in basso i
4 bit alti, immettendo al loro posto degli
0: il
dato in AL
è dunque, alla fine, del tipo 0000yyyyB, con
yyyy
pari al valore logico effettivo dei
4 switch
meno significativi, pronto per
essere integrato con quello assunto in precedenza
(già disponibile nella forma xxxx0000B). |
 |
La fase finale del servizio software di questo progetto
consiste nel ricompattare le 2 metà, bassa e
alta, in un unico byte, da consumare come
meglio si ritiene; in questo punto del programma i 4 bit più
significativi sono in BL, in forma xxxx0000B, mentre quelli
meno
significativi sono in AL, nella forma
0000yyyyB. |
 |
La presenza degli 0
nei 2 bytes componenti facilita la
ricomposizione del dato: basta infatti l'operazione
OR logica tra
AL e BL e il
dato è ricomposto. |
 | Con questo la procedura di lettura è terminata: dopo
l'istruzione precedente il dato letto
dall'ADC sarà
lasciato in AL,
nella forma finale xxxxyyyyB
= XYH. |
©
2001-2006 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|